{
  //Type 可以代表任意类型，无法保证一定存在 length 属性，比如 number 类型就没有 length
  // function id<Type>(value: Type): Type {
  //   console.log(value.length);
  //   return value;
  // }

  // id("a");

  // function id<Type>(value: Type[]): Type[] {
  //     console.log(value.length)
  //     return value
  //   }
  //   id()

  // 创建一个接口
  interface ILength {
    length: number;
  }

  // Type extends ILength 添加泛型约束
  // 解释：表示传入的 类型 必须满足 ILength 接口的要求才行，也就是得有一个 number 类型的 length 属性
  function id<Type extends ILength>(value: Type): Type {
    console.log(value.length);
    return value;
  }

  id("a");
}
